package com.lfy.fyadmin.service;

import com.lfy.fyadmin.entity.User;
import com.lfy.fyadmin.vo.UserVO;
import com.lfy.fyadmin.dto.UserUpdateRequest;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;

/**
* @author 53409
* @description 针对表【user(用户表)】的数据库操作Service
* @createDate 2025-07-23 21:51:27
*/
public interface UserService extends IService<User> {

    /**
     * 根据用户ID查询用户及其角色和分组信息
     * @param id 用户ID
     * @return 用户信息VO
     */
    UserVO getUserWithRolesAndGroups(Long id);

    /**
     * 按需更新用户信息
     * @param user 用户信息
     * @return 是否更新成功
     */
    boolean updateSelective(User user);

    /**
     * 更新用户信息及其角色和分组关联关系
     * @param request 用户更新请求
     * @return 是否更新成功
     */
    boolean updateUserWithRolesAndGroups(UserUpdateRequest request);

    /**
     * 当前用户修改密码
     * @param request 当前用户密码修改请求
     * @return 是否修改成功
     */
    boolean changeCurrentUserPassword(com.lfy.fyadmin.dto.CurrentUserPasswordChangeRequest request);

    /**
     * 管理员重置用户密码
     * @param request 管理员重置密码请求
     * @return 是否重置成功
     */
    boolean adminResetPassword(com.lfy.fyadmin.dto.AdminResetPasswordRequest request);

    /**
     * 分页查询用户（支持多条件查询）
     * @param request 查询条件
     * @return 分页结果
     */
    com.baomidou.mybatisplus.core.metadata.IPage<User> pageUsers(com.lfy.fyadmin.dto.UserQueryRequest request);
    
    /**
     * 删除用户及其关联资源
     * @param userId 用户ID
     * @return 是否删除成功
     */
    boolean deleteUserWithRelations(Long userId);
}
